<?php
namespace App\Librarys;

class PageNumber
{
    /**
     * Notes:
     * User: ADMIN
     * Date: 2020/5/20
     * Time: 11:32
     * @param $arr //待分页数组 必须
     * @param $page //第几页 必须
     * @param int $countofpage //每页数量 可选，不填等于15
     */
    public static function pageNum($arr, $page, $countofpage = 15)
    {
        /* 总记录数 */
        $totalcount = count($arr);
        /* 总的分页数 */
        $numofpage = ceil($totalcount / $countofpage);
        /* 起始记录基数,数组的下表从0开始，所以$start的最小值为0，并以$countofpage为倍数递增 */
        $start = (($page - 1) * $countofpage);
        /* 结束记录基数 */
        $end = $page * $countofpage;
        /* 边界处理 */
        if ($page == $numofpage) {
            $end = $totalcount;
        } else if ($page > $numofpage) {
            /* 非法输入时，定位到第一页 */
            $start = 0;
            $end = $countofpage;
        }
        /* 目标数据的下表区间，比如第一页，15条记录，区间为：[0,15) */
        for ($i = $start; $i < $end; $i++) {
            $num[$i] = $i;
        }
        foreach ($arr as $key => $value) {
            if (in_array($key, $num)) {
                $temp[$key] = $value;
            }
        }
        return $temp;
    }

    /**
     * Notes: 返回分页下表，如前一页，下一页，第一页，最后一页等，显示分页的数量和页数
     * User: ADMIN
     * Date: 2020/5/20
     * Time: 11:39
     * @param $arr //分页的数组
     * @param $page //当前页
     * @param $index //数组的下标
     * @param int $countofpage //每页的数量
     * @return mixed 二维数组
     */
    public static function getLastPage($arr, $page,  $countofpage = 10)
    {
        /* 总记录数 */
        $totalcount = count($arr);
        /* 总的分页数 */
        $numofpage = ceil($totalcount / $countofpage);
        /* 上一页 */
        $temp['before'] = $page - 1;
        /* 当前页 */
        $temp['page'] = $page;
        /* 下一页 */
        $temp['next'] = $page + 1;
        /* 最后一页 */
        $temp['last'] = $numofpage;
        /* 总记录数 */
        $temp['total'] = $totalcount;
        return $temp;
    }

    /**
     * Notes:
     * User: ADMIN
     * Date: 2020/5/20
     * Time: 11:41
     * @param string $arr //分页的数组
     * @param string $index  //在数组里的下标
     * @return array  //二维数组
     */
    public static function showHeader($arr = '', $index = '')
    {
        $temp = array();
        if (!empty($arr)) {
            $temp[$index] = $arr;
        }
        return $temp;
    }

    /**
     * Notes: 合并表头和分页内容
     * User: ADMIN
     * Date: 2020/5/20
     * Time: 11:42
     * @param $arr  //分页内容
     * @param string $option //当前页
     * @param int $page  //表头内容
     * @param int $countofpage //每页数量
     */
    public static function showTable($arr, $page = 1, $countofpage = 15)
    {
        $result = array_merge(
////        self::showheader($option, $countofpage + 1),
//        self::getlastpage($arr, $page, $countofpage + 2, $countofpage),
            self::pageNum($arr, $page, $countofpage)
        );
        return $result;
    }
}
